home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / PowerFantasm™ 4.19a / Beginners guide / GUIDE EXAMPLES / IO_LIB.S < prev   
Text File  |  1997-04-01  |  11KB  |  513 lines

  1. *********************************************************************************
  2. *IO LIB.S - GENERAL PURPOSE IO ROUTINES FOR MACINTOSH - THIS VERSION 1.02       *
  3. *                                                                               *
  4. *VERSION 1.01 - GENERAL USEAGE.                                                 *
  5. *VERSION 1.02 - CHANGED SINGLE QUOTES TO DOUBLE QUOTES AT LINE 420    *
  6. *last modified 200195                *
  7. *********************************************************************************
  8. *INCLUDED:
  9. *INIT MAC - INITIALISES MAC AND CURSOR COORDS
  10. *INIT_CURS - RESET CURSOR TO 10,10
  11. *OPEN WINDOW - OPENS A BIG MAC WINDOW - NEEDS TITLE IN A0, RETURNS HANDLE IN A0
  12. *CLOSE_WINDOW - CLOSES A WINDOW - NEEDS HANDLE IN A0
  13. *PRINTIT      - PRINTS A STRING IN A0 TERMINATED IN 0 IN CURRENT WINDOW
  14. *SETCURSXY    - SETS THE CURSOR COORDS TO D0,D1
  15. *DRAWIT       - PRINTS A CHARACTER IN D0 (ASSUMING CURRENT WINDOW)
  16. *PRINTCR      - DOES A CR
  17. *PRINTNUM     - PRINTS D0.L AS A DECIMAL NUMBER
  18. *C_TO_P_STR   - CONVERTS A C STRING TO A PASCAL STRING
  19. **DO NOT CALL ANY OTHER ROUTINES. THEY ARE FOR SUPPORT PURPOSES FOR THE ABOVE 
  20. **ROUTINES.
  21.  
  22. ***EQUATES FOLLOW
  23. INITCURSOR:    EQU    $A850
  24. INITPORT:    EQU    $A86D
  25. INITGRAF:    EQU    $A86E
  26. INITFONTS:    EQU    $A8FE
  27. INITWINDOWS:    EQU    $A912
  28. INITMENUS:    EQU    $A930
  29. INITDIALOGS:    EQU    $A97B
  30. INITRESOURCES:    EQU    $A995
  31. TEINIT:    EQU    $A9CC
  32. FLUSHEVENTS:    EQU    $A032
  33. TEXT_MODE:    EQU    $A889
  34. GETAPPPARMS:    EQU    $A9F5
  35.  
  36. SYSBEEP:    EQU    $A9C8
  37. NEWWINDOW:    EQU    $A913
  38. DISPOSEWINDOW:    EQU    $A914
  39. TEXTFONT:    EQU    $A887
  40. TEXTSIZE:    EQU    $A88A
  41. GETFONTINFO:    EQU    $A88B
  42. MOVETO:    EQU    $A893
  43. CLOSEWINDOW:    EQU    $A92D
  44. SETPORT:    EQU    $A873
  45. BEGINUPDATE:    EQU    $A922
  46. ENDUPDATE:    EQU    $A923
  47. DRAWCHAR:    EQU    $A883
  48. SETRECT:    EQU    $A8A7
  49. SCROLLRECT:    EQU    $A8EF
  50. GETNEXTEVENT:    EQU    $A970
  51. MENUKEY:    EQU    $A93E
  52. MENUSELECT:    EQU    $A93D
  53. HILITEMENU:    EQU    $A938
  54.  
  55. NEWMENU:    EQU    $A931
  56. APPENDMENU:    EQU    $A933
  57. INSERTMENU:    EQU    $A935
  58. DRAWMENUBAR:    EQU    $A937
  59. ADDRESMENU:    EQU    $A94D
  60. GETMENU:    EQU    $A9BF
  61. PTINRECT:    EQU    $A8AD
  62. TENEW:    EQU    $A9D2
  63. TEKEY:    EQU    $A9DC
  64. TECUT:    EQU    $A9D6
  65. TECOPY:    EQU    $A9D5
  66. TEDELETE:    EQU    $A9D7
  67. TEPASTE:    EQU    $A9DB
  68. TESETSELECT:    EQU    $A9D1
  69. TEIDLE:    EQU    $A9DA
  70. TECLICK:    EQU    $A9D4
  71. GLOBALTOLOCAL:    EQU    $A871
  72. TEACTIVATE:    EQU    $A9D8
  73. TEDEACTIVATE:    EQU    $A9D9
  74. TEUPDATE:    EQU    $A9D3
  75.  
  76. OPEN:    EQU     $A000
  77. READ:    EQU     $A002
  78. CLOSE:    EQU     $A001
  79. GET_EOF:    EQU    $A011
  80. WRITE:    EQU     $A003
  81. SET_EOF:    EQU     $A012
  82. GET_INFO:    EQU     $A00C
  83. SET_INFO:    EQU     $A00D
  84. FLUSH:    EQU     $A013
  85. CREATE:    EQU     $A008
  86. DELETE:    EQU    $A009
  87. SETVOL:    EQU    $A015
  88.  
  89. CREATERESFILE:    EQU    $A9B1
  90. OPENRESFILE:    EQU    $A997
  91. USERESFILE:    EQU    $A998
  92. CLOSERESFILE:    EQU    $A99A
  93. RMVERESOURCE:    EQU    $A9AD
  94. WRITERESOURCE:    EQU    $A9B0
  95. DETACHRESOURCE:    EQU    $A992
  96. CHANGEDRESOURCE:    EQU    $A9AA
  97. UPDATERESFILE:    EQU    $A999
  98. RELEASERESOURCE:    EQU    $A9A3
  99. CURRESFILE:    EQU    $A994
  100. GET1NAMEDRESOURCE:    EQU    $A820
  101. GET1RESOURCE:    EQU    $A81F
  102.  
  103.  
  104. FINDWINDOW:    EQU    $A92C
  105. NEWCONTROL:    EQU    $A954
  106. FINDCONTROL:    EQU    $A96C
  107. TRACKCONTROL:    EQU    $A968
  108. SETCTLVALUE:    EQU    $A963
  109. GETCTLVALUE:    EQU    $A960
  110. GETCTLMAX:    EQU    $A962
  111. SETCTLMAX:    EQU    $A965
  112. STILLDOWN:    EQU    $A973
  113. GETMOUSE:    EQU    $A972
  114. TESTCONTROL:    EQU    $A966
  115. HILITECONTROL:    EQU    $A95D
  116. TESCROLL:    EQU    $A9DD
  117. TECALTEXT:    EQU    $A9D0
  118. DRAWCONTROLS:    EQU    $A969
  119. TEDISPOSE:    EQU    $A9CD
  120. GETWTITLE:    EQU    $A919
  121. DEBUGGER:    EQU    $A9FF
  122. MAXMEM:    EQU    $A11D
  123. HLOCK:    EQU    $A029
  124. SETHANDLESIZE:    EQU    $A024
  125. MAXAPPLZONE:    EQU    $A063
  126. SYSTEMTASK:    EQU    $A9B4
  127. OPENDESKACC:    EQU    $A9B6
  128. GETITEM:    EQU    $A946
  129. ALERT:    EQU    $A985
  130. TICKCOUNT:    EQU    $A975
  131. SNDPLAY:    EQU    $A805    
  132. PACK3:    EQU    $A9EA
  133.     
  134. **********************************INIT MAC***************************************
  135. INIT_MAC:    MOVE.L    A6,-(SP)    SAVE REGISTERS
  136.     LEA    W_VARS(PC),A6    
  137.     LEA    QDGLOB(PC),A0
  138.     LEA    202(A0),A0
  139.     MOVE.L    A0,-(SP)    QDGLOB(202)
  140.     DC.W    INITGRAF
  141.     DC.W    INITFONTS
  142.     MOVEQ    #-1,D0
  143.     DC.W    FLUSHEVENTS
  144.     DC.W    INITWINDOWS
  145.     DC.W    INITMENUS
  146.     CLR.L    -(SP)
  147.     DC.W    INITDIALOGS
  148.     DC.W    TEINIT
  149.     DC.W    INITCURSOR
  150.     BSR    INIT_CURSOR
  151.     MOVEM.L    (SP)+,A6
  152. **END OF MAC INIT**
  153.     RTS
  154.     DC.B    "INIT_MAC",0,0
  155.     EVEN
  156. INIT_CURSOR:
  157.     MOVE.L    A6,-(SP)    
  158.     LEA    W_VARS(PC),A6
  159.     MOVE.W    #10,CURS_X(A6)
  160.     MOVE.W    #10,CURS_Y(A6)
  161.     MOVE.L    (SP)+,A6
  162.     RTS
  163.     DC.B    "INIT_CUR",0,0
  164.     EVEN
  165.     
  166. *****************************wait_key*********************************************
  167. **WAIT FOR A KEY PRESS
  168. WAIT_KEY:    MOVEM.L    D1-D2/A0-A4,-(SP)    *SAVE REGS
  169. WK1:    CLR.B    -(A7) 
  170.     MOVE.W    #-1,-(SP)
  171.     LEA    EVENTS_BUFF(PC),A3
  172.     MOVE.L    A3,-(A7)
  173.     DC.W    43376    *GETNEXTEVENT AS A DECIMAL NUMBER
  174.             *WOULD BE SMARTER TO EQUATE
  175.     MOVE.B    (A7)+,D2
  176.     TST.B    D2
  177.     BEQ.S    WK1    *WAIT FOR SOMETHING
  178.     LEA    EVENTS_BUFF(PC),A4
  179.     MOVE.W    (A4),D2
  180.     CMPI.W    #3,D2    KEY?
  181.     BEQ.S    WAIT_KEY_END
  182.     CMPI.W    #1,D2    MOUSE BUTTON?
  183.     BEQ.S    WAIT_KEY_END
  184.     BRA.S    WK1
  185.     
  186. WAIT_KEY_END:
  187.     MOVE.W    4(A4),D0    ACTUAL KEY
  188.     MOVEM.L    (SP)+,D1-D2/A0-A4    *RESTORE REGS
  189.     RTS
  190. EVENTS_BUFF:    DS.B    16
  191.     DC.B    "WAIT_KEY",0,0
  192.     EVEN
  193.     
  194. *******************************MAC LARGE WINDOW**********************************            
  195. **OPEN WINDOW NEEDS TITLE IN A0
  196. OPEN_WINDOW:    movem.l    d0-d7/a1-a6,-(sp)    *changes for v1.01
  197.     LEA    W_VARS(PC),A6
  198.     LEA    W_TITLE(PC),A1
  199.     BSR    C_TO_P_STR    *CONVERT A0 TO PASCAL IN A1
  200. **SETRECT BOUNDRECT,STARTX,STARTY,ENDX,ENDY
  201.     PEA    BOUNDRECT(PC)
  202.     MOVE.W    #100,-(SP)
  203.     MOVE.W    #100,-(SP)
  204.     MOVE.W    #500,-(SP)
  205.     MOVE.W    #400,-(SP)
  206.     DC.W    SETRECT
  207. **NEWWINDOW
  208.     CLR.L    -(SP)
  209.     CLR.L    -(SP)
  210.     PEA    BOUNDRECT(PC)
  211.     PEA    W_TITLE(PC)
  212.     MOVE.B    #1,-(SP)
  213.     MOVE.W    #4,-(SP)
  214.     MOVE.L    #-1,-(SP)
  215.     MOVE.B    #0,-(SP)
  216.     MOVE.L    #0,-(SP)
  217.     DC.W    NEWWINDOW
  218.     MOVE.L    (SP)+,W_HANDLE(A6)    *SAVE WINDOW HANDLE
  219.     MOVE.L    W_HANDLE(A6),-(SP)
  220.     DC.W    SETPORT
  221.     MOVE.W    #4,-(SP)
  222.     DC.W    TEXTFONT
  223.     MOVE.W    #9,-(SP)
  224.     DC.W    TEXTSIZE
  225.     PEA     VIEWRECT(PC)
  226.     MOVE.W    #4,-(SP)
  227.     MOVE.W    #10,-(SP)
  228.     MOVE.W    #399,-(SP)
  229.     MOVE.W    #299,-(SP)
  230.     DC.W    SETRECT
  231.     MOVE.L    W_HANDLE(A6),A0        *RETURN HANDLE
  232.     movem.l    (sp)+,d0-d7/a1-a6
  233.     RTS
  234.     DC.B    "OPEN_WIN",0,0
  235.     EVEN
  236. **CLOSE WINDOW NEEDS HANDLE IN A0    
  237. CLOSE_WINDOW:    movem.l    D0-D7/A1-A6,-(sp)
  238.     MOVE.L    A0,-(SP)
  239.     DC.W    DISPOSEWINDOW
  240.     movem.l    (sp)+,d0-d7/a1-a6
  241.     RTS
  242.     DC.B    "CLOSE_WI",0,0
  243.     EVEN
  244.  
  245. **NEEDS C STRING IN A0
  246. **AND P BUFFER IN A1
  247. **CONVERTS THE C STRING A0 TO A PASCAL STRING IN A1
  248. C_TO_P_STR:    move.l    d0,-(sp)    *preserve d0
  249.     CLR.L    D0
  250. DO_P_LOOP:    MOVE.B    (A0)+,D1
  251.     BEQ.S    CTOPEND
  252.     ADDQ.L    #1,D0    COUNTER        
  253.     MOVE.B    D1,0(A1,D0.L)    *SAVE BYTE IN P STRING
  254.     BRA.S    DO_P_LOOP
  255. CTOPEND:    MOVE.B    D0,(A1)
  256.     move.l    (sp)+,d0
  257.     RTS
  258.     DC.B    "C_TO_P_S",0,0
  259.     EVEN
  260.  
  261. **set the cursor to x,y where d0 is x coord and d1 is y coord
  262. SETCURSXY:    movem.l    d1-d4/a0-a6,-(sp)
  263.     LEA    W_VARS(PC),A6
  264.     MOVE.W    D0,CURS_X(A6)
  265.     MOVE.W    D1,CURS_Y(A6)
  266.     MOVE.W    D0,-(SP)
  267.     MOVE.W    D1,-(SP)
  268.     DC.W    MOVETO
  269.     movem.l    (sp)+,d1-d4/a0-a6
  270.     RTS
  271.     DC.B    "SETCURXY",0,0
  272.     EVEN
  273.     
  274. **PRINTIT PRINTS THE STRING IN    A0 AT CURS_X,CURS_Y
  275. **THE STRING MUST BE TERMINATED    IN 0    BYTE
  276. **THIS IS THE SLOW METHOD OF PRINTING STRINGS.
  277. **THE MAC HAS A PRINTSTRING ROUTINE IN THE TOOLBOX.
  278. PRINTIT:    MOVEM.L    d0-d1/A0-A6,-(SP)
  279.     lea    w_vars(pc),a6
  280.     MOVE.L    A0,-(A7)
  281.     MOVE.W    CURS_X(A6),-(A7)
  282.     MOVE.W    CURS_Y(A6),-(A7)
  283.     DC.W    MOVETO        *POSITION CURSOR    AT CURS_X,CURS_Y
  284.     MOVEA.L    (A7)+,A0
  285. **MAIN PRINT LOOP
  286. PR1:    MOVE.B    (A0)+,D0    *GET CHARACTER
  287.     BEQ.S    P1END    *IF 0 THEN END OF PRINT
  288.     CMPI.B    #13,D0    *CR?
  289.     BEQ.S    DO_CR1    *YEP, DO CR
  290.     MOVE.L    A0,-(A7)
  291.     BSR.S    DRAWIT    *PRINT CHAR
  292.     MOVEA.L    (A7)+,A0
  293.     BRA.S    PR1    *LOOP FOR NEXT     CHAR
  294. P1END:    MOVEM.L    (SP)+,d0-d1/A0-A6    *RESTORE REGS
  295.     RTS        *END OF PRINT
  296. **IF PRINTIT DETECTS CR IT COMES HERE
  297. DO_CR1:    MOVE.W    #10,CURS_X(A6)        *RESET CURS X TO 10
  298.     MOVE.W    CURS_Y(A6),D1
  299.     ADD.W    #10,D1        *ADD 10 TO CURS Y
  300.     MOVE.W    D1,CURS_Y(A6)
  301.     MOVE.L    A0,-(A7)
  302.     MOVE.W    D1,-(A7)
  303.     MOVE.W    CURS_X(A6),-(A7)
  304.     DC.W    MOVETO
  305.     MOVEA.L    (A7)+,A0
  306.     BRA.S    PR1        *BACK TO PRINTIT
  307.  
  308. **DRAWIT PRINTS A CHARACTER IN D0.
  309. **ALSO STORES THE CHARACTER IN ERROR_BUFFER IF THERES ROOM
  310. **can be called only from printit
  311. DRAWIT:    MOVE.W    D0,-(A7)
  312.     ADDQ.W    #6,CURS_X(A6)
  313.     DC.W    DRAWCHAR
  314. DI_END:    RTS
  315.     DC.B    "PRINTIT "
  316.  
  317. **print curs prints the character in d0 then a "|" character, then moves the cursor
  318. **coords back 1 x position
  319. PRINT_CURS:    movem.l    d0/a0-a1/a6,-(sp)
  320.     LEA    W_VARS(PC),A6
  321.     MOVE.W    D0,-(SP)    *SAVE CHAR
  322.     MOVE.W    #0,-(sp) ;    *AND (1=OR) DRAWING MODE
  323.     DC.W    TEXT_MODE
  324.     SUBQ.W    #6,CURS_X(A6)    *DELETE OLD CURS
  325.     MOVE.W    CURS_X(A6),-(SP)
  326.     MOVE.W    CURS_Y(A6),-(SP)
  327.     DC.W    MOVETO    
  328.     DC.W    DRAWCHAR    *D0 IS ON STACK ALREADY
  329.     MOVE.W    #"|",-(SP)
  330.     DC.W    DRAWCHAR
  331.     ADD.W    #12,CURS_X(A6)
  332.     MOVE.W    #1,-(SP)
  333.     DC.W    TEXT_MODE    *BACK TO "OR" MODE
  334.     MOVEM.L    (SP)+,D0/A0-A1/A6
  335.     RTS
  336.     DC.B    "PRINT_CU",0,0
  337.     EVEN
  338. **backspace can be called if the delete key is pressed to move the cursor
  339. *8back 1 x position, overwriting the old character
  340. BACKSPACE:    movem.l    a0-a1/a6,-(sp)
  341.     LEA    W_VARS(PC),A6
  342.     MOVE.W    #0,-(A7) ;    *AND (1=OR) DRAWING MODE
  343.     DC.W    TEXT_MODE
  344.     SUB.W    #6,CURS_X(A6)
  345.     MOVE.W    CURS_X(A6),-(SP)
  346.     MOVE.W    CURS_Y(A6),-(SP)
  347.     DC.W    MOVETO    
  348.     MOVE.W    #" ",-(SP)    *DELETE OLD CURS
  349.     DC.W    DRAWCHAR    *D0 IS ON STACK
  350.     SUBQ.W    #6,CURS_X(A6)
  351.     MOVE.W    CURS_X(A6),-(SP)
  352.     MOVE.W    CURS_Y(A6),-(SP)
  353.     DC.W    MOVETO
  354.     MOVE.W    #"|",-(SP)
  355.     DC.W    DRAWCHAR
  356.     ADD.W    #6,CURS_X(A6)
  357.     MOVE.W    #1,-(SP)
  358.     DC.W    TEXT_MODE
  359.     movem.l    (sp)+,a0-a1/a6
  360.     RTS
  361.     DC.B    "BACKSPAC",0,0
  362.     EVEN
  363. **PRINTCR DOES A CR
  364. PRINTCR:    MOVE.L    A0,-(A7)
  365.     LEA    CR_TEXT(PC),A0
  366.     BSR    PRINTIT
  367.     MOVEA.L    (A7)+,A0
  368.     RTS
  369.     DC.B    "PRINTCR ",0,0
  370.     EVEN
  371. **PRINTNUM PRINTS A 32 BIT NUMBER HELD IN D0
  372. **LIMITED TO 1E7
  373. **USES COMMAS FOR SEPERATORS.
  374. PRINTNUM:    movem.l    d0-d6/a0-a6,-(sp)
  375.     LEA    W_VARS(PC),A6
  376. **FIND SIZE OF NUMBER TO QUASH LEADING ZEROS
  377.     LEA    CHAR_BUFF(PC),A0    *WHERE CHARS ARE    STORED FOR PRINTING
  378.     CMPI.L    #$FFFF,D0
  379.     BGT.S    PRINT_LONG    *LONG WORD PRINT
  380.     MOVEQ    #0,D6
  381.     MOVE.W    D0,D6
  382.     CMPI.L    #10,D6
  383.     BLT.S    DO_UNITS
  384.     CMPI.L    #100,D6
  385.     BLT.S    DO_TENS
  386.     CMPI.L    #1000,D6
  387.     BLT.S    DO_HUNS
  388.     CMPI.L    #10000,D6
  389.     BLT.S    DO_THOU
  390. **NOW DIVIDE BY RELEVANT UNITS
  391. LONG_ENT:    DIVS    #10000,D6    *GET TENS OF THOUDSANDS
  392.     BSR.S    CONVERT_N    *PRINT NUMBER OF TENS OF THOUSANDS
  393. DO_THOU:    DIVS    #1000,D6    *GET THOUSANDS
  394.     BSR.S    CONVERT_N    *ETC
  395.     MOVE.B    #",",0(A0)
  396.     BSR    PRINTIT        *PRINT COMMA BEFORE TENS HUNDREDS
  397. DO_HUNS:    DIVS    #100,D6
  398.     BSR.S    CONVERT_N
  399. DO_TENS:    DIVS    #10,D6
  400.     BSR.S    CONVERT_N
  401. DO_UNITS:    BSR.S    CONVERT_N
  402.     movem.l    (sp)+,d0-d6/a0-a6
  403.     RTS
  404.     
  405. CONVERT_N:    ADDI.B    #48,D6    *MAKE CHARACTER    (ASCII)
  406.     MOVE.B    D6,0(A0)
  407.     BSR    PRINTIT        *DISPLAY    CHARACTER
  408.     SWAP    D6
  409.     ANDI.L    #$FFFF,D6
  410.     RTS
  411.     DC.B    "PRINTNUM"
  412.     
  413. **PRINT LONG PRINT DO.L
  414. **LIMITED TO 1E7 (10MEG)
  415. PRINT_LONG:    CMPI.L    #9999999,D0
  416.     BGT.S    NUMB_ERROR
  417.     MOVE.L    D0,D1
  418.     CMPI.L    #99999,D0
  419.     BLT.S    DO_TEN_THOU
  420.     CMPI.L    #999999,D0
  421.     BLT.S    DO_HUND_THOU
  422.     MOVE.L    #1000000,D0    *GET MILLIONS
  423.     BSR    LONG_DIV    *DIVIDE D1.L BY D0.L WITH REMAINDER IN D0
  424.     ADDI.B    #"0",D1
  425.     MOVE.B    D1,0(A0)
  426.     MOVE.L    D0,D6
  427.     BSR    PRINTIT
  428.     MOVE.B    #",",0(A0)
  429.     BSR    PRINTIT
  430.     MOVE.L    D6,D1
  431. DO_HUND_THOU:    MOVE.L    #100000,D0    *GET 100 THOUSANDS
  432.     BSR    LONG_DIV
  433.     ADDI.B    #"0",D1
  434.     MOVE.B    D1,0(A0)
  435.     MOVE.L    D0,D6
  436.     BSR    PRINTIT
  437.     CMPI.L    #$FFFF,D6    *<65536?
  438.     BLT    LONG_ENT    *YES, PRINT WORD ROUTINE
  439.     MOVE.L    D6,D1        *NO,GET 10THOUSANDS
  440. DO_TEN_THOU:    MOVE.L    #10000,D0
  441.     BSR    LONG_DIV
  442.     ADDI.B    #"0",D1
  443.     MOVE.B    D1,0(A0)
  444.     MOVE.L    D0,D6
  445.     BSR    PRINTIT
  446.     ANDI.L    #$FFFF,D6
  447.     BRA    DO_THOU
  448.  
  449. NUMB_ERROR:    LEA    NUMB_TOO_BIG(PC),A0
  450.     BSR    PRINTIT
  451.     movem.l    (sp)+,d0-d6/a0-a6
  452.     RTS
  453.     dc.b    "PRINTLNG",0,0    *MACSBUG LABEL
  454.     EVEN
  455. **LONG DIV DIVIDES D1.L BY D0.L
  456. LONG_DIV:
  457.  TST.L  D0
  458.  BNE.S DIV
  459.  DIVU.W     D0,D1
  460.  RTS
  461. DIV:
  462.  BPL.S DO_DIV
  463.  NEG.L D0
  464.  BSR.S DO_DIV
  465.  NEG.L D1
  466.  RTS
  467. DO_DIV:
  468.  TST.L D1
  469.  BPL.S DIV_P
  470.  NEG.L D1
  471.  BSR.S DIV_P
  472.  NEG.L D1
  473.  NEG.L D0
  474.  RTS
  475. DIV_P:
  476.  CLR.L D3
  477.  CLR.L D2
  478. DIV2:
  479.  CMP.L D0,D1
  480.  BLS.S DIV1
  481.  ADDQ.L #1,D3
  482.  LSL.L #1,D0
  483.  BMI.S DIV3
  484.  BRA.S DIV2
  485. DIV5:
  486.  LSL.L #1,D2
  487.  LSR.L #1,D0
  488. DIV3:
  489.  CMP.L D0,D1
  490. DIV1:
  491.  BCS.S DIV4
  492.  SUB.L D0,D1
  493.  ADDQ.L #1,D2
  494. DIV4:
  495.  DBF D3,DIV5
  496.  MOVE.L D1,D0
  497.  MOVE.L D2,D1
  498.  RTS
  499.     
  500. W_HANDLE:    EQU    0
  501. CURS_X:    EQU    4
  502. CURS_Y:    EQU    6
  503.  
  504. W_VARS:    DS.W    20
  505. W_TITLE:    DS.B    100
  506. VIEWRECT:    DS.B    8    *VIEW RECTANGLE
  507. BOUNDRECT:    DS.B    8
  508. NUMB_TOO_BIG:    DC.B    "XXXXXXXXXXXX",0
  509.     EVEN
  510. CR_TEXT:    DC.B    13,0
  511. CHAR_BUFF:    DS.B    20
  512. QDGLOB:    DS.B    3000
  513.     align